package queue;


import java.util.LinkedList;
import java.util.Queue;

/**
 * https://leetcode.cn/problems/implement-stack-using-queues/
 *
 * 使用两个队列，一个队列在push的时候放入元素，先放入的元素肯定是先出来的，后放入的元素肯定是top
 *
 * pop的时候其实是pop 队列最后一个元素，那么就要一个个拿出来，放入到另外一个队列去，等到队列还剩下一个的时候，那么这个元素就是应该pop的
 */
public class _225_用队列实现栈 {

    Queue<Integer> q1;
    Queue<Integer> q2;

    int top;

    public _225_用队列实现栈() {
        q1 = new LinkedList<>();
        q2 = new LinkedList<>();
    }

    public void push(int x) {
        q1.offer(x);
        top = x;
    }

    public int pop() {
        while (q1.size() > 1) {
            top = q1.poll();
            q2.offer(top);
        }

        int pop = q1.poll();
        Queue<Integer> tmp = q1;
        q1 = q2;
        q2 = tmp;
        return pop;
    }

    public int top() {
        return top;
    }

    public boolean empty() {
        return q1.isEmpty() && q2.isEmpty();
    }

}
